package com.deer.wms.base.system.dao.bill;


import com.deer.wms.base.system.model.bill.*;
import com.deer.wms.base.system.model.task.TaskInfo;
import com.deer.wms.base.system.model.zh.WorkTasks;
import com.deer.wms.common.core.commonMapper.Mapper;
import com.deer.wms.base.system.model.box.BoxItem;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 入库单 数据层
 * 
 * @author guo
 * @date 2019-05-13
 */
public interface BillInMasterMapper  extends Mapper<BillInMaster>
{
	/**
	 * 开始作业
	 * @param billId
	 * @return
	 */
	int startAssignment(Integer billId);

	/**
	 * 取消作业作业
	 * @param billId
	 * @return
	 */
	int endAssignment(Integer billId);
	/**
	 * 入库单审核通过
	 * @param billInMaster
	 * @return
	 */
	public int createInfoByBillNO(BillInMaster billInMaster);

	int auditFinish(Integer billId);
	/**
	 *
	 * 查询物料详情数据(点击物料详情)
	 */
	public List<BillInDetail> selectBillInDetail();

	public BillInMaster selectBillInMasterByBillNo(String billNo);
	/**
	 *
	 * 查询组盘(点击组盘信息)
	 */
	public List<BoxItem> selectBoxItem(Integer billId);


	/**
	 *
	 * 保存组盘
	 */
	public void saveBox(BoxItem boxItem);



	/**
     * 查询入库单信息
     * 
     * @param billId 入库单ID
     * @return 入库单信息
     */
	public BillInMasterDto selectBillInMasterById(Integer billId);


	/**
	 * 入库作业显示入库单具体信息
	 * @param billId
	 * @return
	 */
	BillInMasterDto findBillInMasterById(Integer billId);

	public List<BillInMasterDto> findExportList(BillInMasterCriteria criteria);

	/**
     * 查询入库单列表
     * 
     * @param criteria 入库单信息
     * @return 入库单集合
     */
	public List<BillInMasterDto> selectBillInMasterList(BillInMasterCriteria criteria);

	/**
	 * 查询入库单列表(关联查询)
	 *
	 * @param billInMasterCriteria 入库单信息
	 * @return 入库单集合
	 */
	public List<BillInMasterDto> findList(BillInMasterCriteria billInMasterCriteria);




	/*新增入库单*/
	int insertBillInMaster(BillInMaster billInMaster);
	
	/**
     * 修改入库单
     * 
     * @param billInMaster 入库单信息
     * @return 结果
     */
	public int updateBillInMaster(BillInMaster billInMaster);
	
	/**
     * 删除入库单
     * 
     * @param billId 入库单ID
     * @return 结果
     */
	public int deleteBillInMasterById(Integer billId);
	
	/**
     * 批量删除入库单
     * 
     * @param billIds 需要删除的数据ID
     * @return 结果
     */
	public int deleteBillInMasterByIds(String[] billIds);

	public int deleteBillInDetailByIds(String[] billInDetailIds);
	/**
	 * 获取入库单据的总数
	 */
	int BillInMasterCount();

	/**
	 * 获取状态下的总数
	 * @return
	 */
	int BillInMasterCountByState();
	/**
	 * 折线图 每天的总数
	 * @return
	 */
	List<Integer> getBillInMasterWeek();

	List<BillInMaster> getBillInMasterList();

    void insertMaterialInfo(MaterialInfo materialInfos);

    /*查入库单列表*/
	List<BillInMaster> selectBillInMaster(BillInMaster billInMaster);
	/*根据billId查入库单*/
	BillInMaster findBillInMasterByBillId(Integer billId);
	/*根据billId查入库单明细*/
    List<BillInDetailDto> findBillInDetailById(Integer billId);
	/*根据detailId查询明细托盘物料*/
	List<BillInDetailItemDto> findBillInDetailItemById(Integer detailId);
	/*查入库流水明细*/
    List<BillInDetailStreamDto> selectDetailStreamList(BillInDetailStreamDto billInDetailStreamDto);

	/*根据物料编码,查归属入库单*/
    List<BillInMaster> findBillInMasterByItemCode(WorkTasks workTasks);
	/*添加入库明细*/
	void insertBillInDetail(BillInDetail billInDetail);
	/*根据任务号查对应的入库单明细*/
	List<BillInDetailDto> selectBillInDetailByTaskNumber(Long taskNumber);
	/*添加过秤明细*/
	void insertBillInDetailItem(BillInDetailItem billInDetailItem);
	/*添加称重重量*/
	void saveBillInDetail(BillInDetail billInDetail);
	/*添加明细叠放高度*/
	void saveBillInDetailHeight(BillInDetail billInDetail);
	/*手持机查入库单*/
	List<BillInMaster> selectBillInMasterPda(BillInMaster billInMaster);
	/*根据sapId修改对应入库单的sapNo*/
    void updateSapNoBySapId(BillInSap billInSap);
	/*根据detail删除托盘列表*/
    void deleteBillInDetailItemById(Integer billInDetailId);
	/*修改明细高度/重量*/
	void updateBillInDetail(BillInDetail billInDetail);
	/*根据任务号获取高度*/
	BillInDetailDto selectHeightByTaskNumber(Long taskNumber);
	/*任务作业添加明细*/
	void saveInDetailId(@Param("id") Integer id, @Param("billInDetailId")Integer billInDetailId);
	/*入库流水合计*/
	BillInDetailStreamDto getDetailSum(BillInDetailStreamDto detailAll);
}